package bilibili.qmtdcxy;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * 学生管理模板
 */
public class StudentManage {
    //获取控制台输入使用的对象
    private static Scanner scanner = new Scanner(System.in);
    //学生容器存放学生信息，key为学号，value为Student对象
    private static Map<String, Student> studentIco=new HashMap();

    /**
     * 主选择菜单
     * 返回值 菜单选择结果，例如：选择添加学生会输入1，当前方法就会返回1
     */
    public static String getMenu() {
        //向控制台输出菜单文字描述
        System.out.println("---------------学生管理系统---------------");
        System.out.println("               1、添加学生");
        System.out.println("               2、修改学生");
        System.out.println("               3、删除学生");
        System.out.println("               4、查询学生");
        System.out.println("               5、退出系统");
        System.out.println("---------------学生管理系统---------------");
        //输出选择菜单的提示词
        System.out.print("请选择菜单：");
        //读取输入的菜单选项
        String menuSelect = StudentManage.scanner.next();
        //返回选择结果
        return menuSelect;
    }

    /**
     * 添加学生信息
     * 返回布尔类型，成功为true，失败为false
     */
    public static boolean addStudent() {
        //输出提示词
        System.out.println("请输入学生的学号：");
        //读取控制台输入的学号
        String number = StudentManage.scanner.next();
        //去除学号前后的空白字符。这里是因为有可能会出现学号后面带空格，本来学号是1，带空格是1 ，但是从控制台看不出来
        //1和1 不是一个字符串，比对一定会失败，这里需要考虑这种情况并且去掉空格。String自带trim方法可以去除空格。
        number = number.trim();
        //这里需要判断一下，学号不能为空，没有学号就无法查询到这个学生，所以学号必须填写，也就是必填字段。
        if (number.isEmpty()) {
            System.out.println("学号填写错误");
            //这里逻辑，如果学号为空，直接返回false表示添加学生失败。
            return false;
        }
        //这里判断学号是否重复，通过学号查询学生信息，如果查询结果为null，则说明没有这个学生，如果查询结果不为null，则说明有这个学生
        Student qst = studentIco.get(number);
        if (qst != null) {
            System.out.println("学号已存在！");
            //这里逻辑，如果学号已存在，直接返回false表示添加学生失败。
            return false;
        }
        System.out.println("请输入学生的性别：");
        //读取控制台输入的性别
        String sex = StudentManage.scanner.next();
        System.out.println("请输入学生的身高：");
        //读取控制台输入的身高
        String height = StudentManage.scanner.next();
        System.out.println("请输入学生的体重：");
        //读取控制台输入的体重
        String width = StudentManage.scanner.next();
        //创建学生对象实列，用于存储用户输入的学生信息
        Student student = new Student();
        student.number = number;
        student.sex = sex;
        student.height = height;
        student.width = width;
        //将用户信息存放到学生容器中
        StudentManage.studentIco.put(student.number, student);
        return true;
    }

    /**
     * 修改学生信息
     * 返回布尔类型，成功为true，失败为false
     */
    public static boolean editStudent() {
        //输出提示信息
        System.out.print("请输入学生学号：");
        String number = scanner.next();
        //去除学号前后的空白字符。这里是因为有可能会出现学号后面带空格，本来学号是1，带空格是1 ，但是从控制台看不出来
        //1和1 不是一个字符串，比对一定会失败，这里需要考虑这种情况并且去掉空格。String自带trim方法可以去除空格。
        number = number.trim();
        //这里需要判断一下，学号不能为空，没有学号就无法查询到这个学生，所以学号必须填写，也就是必填字段。
        if (number.isEmpty()) {
            System.out.println("学号填写错误");
            //这里逻辑，如果学号为空，直接返回false表示修改学生失败。
            return false;
        }
        //这里判断学号是否存在，通过学号查询学生信息，如果查询结果为null，则说明没有这个学生，如果查询结果不为null，则说明有这个学生
        Student qst = studentIco.get(number);
        if (qst == null) {
            System.out.println("学号不存在！");
            //这里逻辑，如果学号不存在存在，直接返回false表示修改学生失败。
            return false;
        }
        //获取需要修改的内容
        System.out.println("修改性别：");
        String sex = StudentManage.scanner.next();
        System.out.println("修改身高：");
        String height = StudentManage.scanner.next();
        System.out.println("修改体重：");
        String width = StudentManage.scanner.next();
        //上面只是获取到需要修改的内容，接下来是修改学生对象中相关信息
        qst.sex = sex;
        qst.height = height;
        qst.width = width;
        //将学生对象重新放回到容器
        StudentManage.studentIco.put(qst.number, qst);
        return true;
    }

    /**
     * 删除学生信息
     * 返回布尔类型，成功为true，失败为false
     */
    public static boolean delStudent() {
        System.out.println("请输入删除学生的学号：");
        String number = StudentManage.scanner.next();
        //去除学号前后的空白字符。这里是因为有可能会出现学号后面带空格，本来学号是1，带空格是1 ，但是从控制台看不出来
        //1和1 不是一个字符串，比对一定会失败，这里需要考虑这种情况并且去掉空格。String自带trim方法可以去除空格。
        number = number.trim();
        //这里需要判断一下，学号不能为空，没有学号就无法查询到这个学生，所以学号必须填写，也就是必填字段。
        if (number.isEmpty()) {
            System.out.println("学号填写错误");
            //这里逻辑，如果学号为空，直接返回false表示学生删除失败。
            return false;
        }
        //这里判断学号是否存在，通过学号查询学生信息，如果查询结果为null，则说明没有这个学生，如果查询结果不为null，则说明有这个学生
        Student qst = studentIco.get(number);
        if (qst == null) {
            System.out.println("学号不存在！");
            //这里逻辑，如果学号不存在，直接返回false表示删除学生失败。
            return false;
        }
        //从容器中移除学生
        StudentManage.studentIco.remove(number);
        return true;
    }

    /**
     * 查询学生信息
     * 返回布尔类型，成功为true，失败为false
     */
    public static boolean queryStudent() {
        System.out.print("请输入学生学号：");
        String number =StudentManage.scanner.next();
        //去除学号前后的空白字符。这里是因为有可能会出现学号后面带空格，本来学号是1，带空格是1 ，但是从控制台看不出来
        //1和1 不是一个字符串，比对一定会失败，这里需要考虑这种情况并且去掉空格。String自带trim方法可以去除空格。
        number = number.trim();
        //这里需要判断一下，学号不能为空，没有学号就无法查询到这个学生，所以学号必须填写，也就是必填字段。
        if (number.isEmpty()) {
            System.out.println("学号填写错误");
            //这里逻辑，如果学号为空，直接返回false表示学生查询失败。
            return false;
        }
        //这里判断学号是否存在，通过学号查询学生信息，如果查询结果为null，则说明没有这个学生，如果查询结果不为null，则说明有这个学生
        Student qst = studentIco.get(number);
        if (qst == null) {
            System.out.println("学号不存在！");
            //这里逻辑，如果学号不存在，直接返回false表示查询学生失败。
            return false;
        }
        //输出学生信息到控制台
        System.out.println("学生学号："+ qst.number);
        System.out.println("学生性别："+ qst.sex);
        System.out.println("学生身高："+ qst.height);
        System.out.println("学生体重："+ qst.width);
        return true;
    }
}
